--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / backend / plugin_permissions.py
Displaying Raw • Download
meshchatx/src/backend/plugin_permissions.py fa46dc4ce9ab50cbe66a7a9e4b3bca0140102345 (fa46dc4c) Text, 9.83 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Plugin permission catalog, grant normalization, and network endpoint scanning."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787json
Tff7b72import T7ee787os
Tff7b72import T7ee787re
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any
Te6edf3KNOWN_HOOKS Tff7b72= Tffa657frozensetTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrns.link.eventTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3KNOWN_MANAGERS Tff7b72= Tffa657frozensetTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffdestinationPath.readTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdebugLog.readTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.statusTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.listCollectorsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.listReportsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.deleteReportTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.clearReportsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.previewTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.sendTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.startCollectorTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.stopCollectorTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.announceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbugReport.setCollectorNameTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrnsLink.openTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrnsLink.identifyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrnsLink.requestTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrnsLink.sendTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrnsLink.closeTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3KNOWN_STORAGE Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffisolatedTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnoneTa5d6ff"Tb4b4b4}Tb4b4b4)
Te6edf3KNOWN_NETWORK Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffnoneTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffetchTa5d6ff"Tb4b4b4}Tb4b4b4)
Te6edf3_URL_IN_TEXT_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"""Ta5d6ffhttps?://[^Ta5d6ff\Ta5d6ffsTa5d6ff"Ta5d6ff'Ta5d6ff<>Ta5d6ff\Ta5d6ff\Ta5d6ff)Ta5d6ff\Ta5d6ff]]+Ta5d6ff"""Tb4b4b4)
Te6edf3_SCHEME_HOST_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(
Ta5d6ffrTa5d6ff"Ta5d6ffhttps?://([a-z0-9][-a-z0-9.]*(?:Ta5d6ff\Ta5d6ff.[a-z0-9][-a-z0-9.]*)+)Ta5d6ff"Tb4b4b4,
Te6edf3reTff7b72.Td2a8ffIGNORECASETb4b4b4,
Tb4b4b4)
Te6edf3_SCAN_EXTENSIONS Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ff.jsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.mjsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.jsonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.wasmTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.tsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.goTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.watTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72def Td2a8ffpermission_id_for_hookTb4b4b4(Te6edf3hookTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffhooks:Tffd700{Te6edf3hookTffd700}Ta5d6ff"
Tff7b72def Td2a8ffpermission_id_for_managerTb4b4b4(Te6edf3managerTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffmanagers:Tffd700{Te6edf3managerTffd700}Ta5d6ff"
Tff7b72def Td2a8ffpermission_id_for_storageTb4b4b4(Te6edf3storageTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffstorage:Tffd700{Te6edf3storageTffd700}Ta5d6ff"
Tff7b72def Td2a8ffpermission_id_for_networkTb4b4b4(Te6edf3networkTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffnetwork:Tffd700{Te6edf3networkTffd700}Ta5d6ff"
Tff7b72def Td2a8ffnormalize_network_modeTb4b4b4(Te6edf3valueTb4b4b4: Te6edf3AnyTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72if Te6edf3value Tff7b72is Tff7b72None Tff7b72or Te6edf3value Tff7b72== Ta5d6ff"Ta5d6ff" Tff7b72or Te6edf3value Tff7b72== Ta5d6ff"Ta5d6ffnoneTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72if Te6edf3value Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6fffetchTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffhttpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffhttpsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffoutboundTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6fffetchTa5d6ff"
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6fffetchTa5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72def Td2a8ffdeclared_permission_idsTb4b4b4(Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3permissionsTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Te6edf3idsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3hook Tff7b72in Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3hookTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Te6edf3hookTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3permission_id_for_hookTb4b4b4(Te6edf3hookTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3manager Tff7b72in Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmanagersTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3managerTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Te6edf3managerTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3permission_id_for_managerTb4b4b4(Te6edf3managerTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3storage Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3storageTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Te6edf3storage Tff7b72not Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnoneTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3permission_id_for_storageTb4b4b4(Te6edf3storageTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3network Tff7b72= Te6edf3normalize_network_modeTb4b4b4(Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnetworkTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3network Tff7b72!= Ta5d6ff"Ta5d6ffnoneTa5d6ff"Tb4b4b4:
Te6edf3idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3permission_id_for_networkTb4b4b4(Te6edf3networkTb4b4b4)Tb4b4b4)
T8b949e# Deduplicate while preserving order.
Te6edf3seenTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Te6edf3orderedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3item Tff7b72in Te6edf3idsTb4b4b4:
Tff7b72if Te6edf3item Tff7b72in Te6edf3seenTb4b4b4:
Tff7b72continue
Te6edf3seenTff7b72.Td2a8ffaddTb4b4b4(Te6edf3itemTb4b4b4)
Te6edf3orderedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72return Te6edf3ordered
Tff7b72def Td2a8ffvalidate_declared_permissionsTb4b4b4(Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3permissions Tff7b72and Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3permissionsTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffpermissions must be an objectTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3permissionsTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72for Te6edf3hook Tff7b72in Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3hookTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Te6edf3hook Tff7b72not Tff7b72in Te6edf3KNOWN_HOOKSTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown hook permission: Tffd700{Te6edf3hookTffd700!r}Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3manager Tff7b72in Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmanagersTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3managerTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Te6edf3manager Tff7b72not Tff7b72in Te6edf3KNOWN_MANAGERSTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown manager permission: Tffd700{Te6edf3managerTffd700!r}Ta5d6ff"Tb4b4b4)
Te6edf3storage Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnoneTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3storage Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3storage Tff7b72not Tff7b72in Te6edf3KNOWN_STORAGETb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown storage permission: Tffd700{Te6edf3storageTffd700!r}Ta5d6ff"Tb4b4b4)
Te6edf3network Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnetworkTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnoneTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3network Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3normalize_network_modeTb4b4b4(Te6edf3networkTb4b4b4) Tff7b72not Tff7b72in Te6edf3KNOWN_NETWORKTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown network permission: Tffd700{Te6edf3networkTffd700!r}Ta5d6ff"Tb4b4b4)
Te6edf3network_block Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnetworkTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3network_block Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3network_blockTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffnetwork must be an objectTa5d6ff"Tb4b4b4)
Te6edf3endpoints Tff7b72= Te6edf3network_blockTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffendpointsTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3endpoints Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3endpointsTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffnetwork.endpoints must be an arrayTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffnormalize_granted_permissionsTb4b4b4(
Te6edf3declaredTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4,
Te6edf3grantedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3declared_set Tff7b72= Tffa657setTb4b4b4(Te6edf3declaredTb4b4b4)
Tff7b72if Te6edf3granted Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tffa657listTb4b4b4(Te6edf3declaredTb4b4b4)
Te6edf3selectedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3seenTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3item Tff7b72in Te6edf3grantedTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3itemTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72if Te6edf3item Tff7b72not Tff7b72in Te6edf3declared_set Tff7b72or Te6edf3item Tff7b72in Te6edf3seenTb4b4b4:
Tff7b72continue
Te6edf3seenTff7b72.Td2a8ffaddTb4b4b4(Te6edf3itemTb4b4b4)
Te6edf3selectedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72return Te6edf3selected
Tff7b72def Td2a8ffgranted_allows_hookTb4b4b4(Te6edf3grantedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4, Te6edf3hookTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Te6edf3granted Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Te6edf3permission_id_for_hookTb4b4b4(Te6edf3hookTb4b4b4) Tff7b72in Te6edf3granted
Tff7b72def Td2a8ffgranted_allows_managerTb4b4b4(Te6edf3grantedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4, Te6edf3managerTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Te6edf3granted Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Te6edf3permission_id_for_managerTb4b4b4(Te6edf3managerTb4b4b4) Tff7b72in Te6edf3granted
Tff7b72def Td2a8ffgranted_allows_network_fetchTb4b4b4(Te6edf3grantedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Te6edf3granted Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Te6edf3permission_id_for_networkTb4b4b4(Ta5d6ff"Ta5d6fffetchTa5d6ff"Tb4b4b4) Tff7b72in Te6edf3granted
Tff7b72def Td2a8ffgranted_allows_storageTb4b4b4(Te6edf3grantedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Te6edf3granted Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Te6edf3permission_id_for_storageTb4b4b4(Ta5d6ff"Ta5d6ffisolatedTa5d6ff"Tb4b4b4) Tff7b72in Te6edf3granted
Tff7b72def Td2a8ff_normalize_endpointTb4b4b4(Te6edf3valueTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffrstripTb4b4b4(Ta5d6ff"Ta5d6ff.,;)]}Tffea00\"Ta5d6ff'Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_is_http_urlTb4b4b4(Te6edf3valueTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3lower Tff7b72= Te6edf3valueTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffhttp://Ta5d6ff"Tb4b4b4) Tff7b72or Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffhttps://Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_is_external_http_urlTb4b4b4(Te6edf3valueTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Tff7b72not Te6edf3_is_http_urlTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3lower Tff7b72= Te6edf3valueTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fflocalhostTa5d6ff" Tff7b72in Te6edf3lower Tff7b72or Ta5d6ff"Ta5d6ff127.0.0.1Ta5d6ff" Tff7b72in Te6edf3lower Tff7b72or Ta5d6ff"Ta5d6ff0.0.0.0Ta5d6ff" Tff7b72in Te6edf3lowerTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72if Ta5d6ff"Ta5d6ff/_plugins/Ta5d6ff" Tff7b72in Te6edf3lower Tff7b72or Ta5d6ff"Ta5d6ff/api/v1/plugins/Ta5d6ff" Tff7b72in Te6edf3lowerTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True
Tff7b72def Td2a8ff_should_scan_network_fileTb4b4b4(Te6edf3pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3ext Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffsplitextTb4b4b4(Te6edf3pathTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3ext Tff7b72in Te6edf3_SCAN_EXTENSIONS
Tff7b72def Td2a8ffextract_urls_from_textTb4b4b4(Te6edf3textTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3seenTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Te6edf3outTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3match Tff7b72in Te6edf3_URL_IN_TEXT_RETff7b72.Td2a8fffindallTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Te6edf3endpoint Tff7b72= Te6edf3_normalize_endpointTb4b4b4(Te6edf3matchTb4b4b4)
Tff7b72if Tff7b72not Te6edf3endpoint Tff7b72or Tff7b72not Te6edf3_is_external_http_urlTb4b4b4(Te6edf3endpointTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72if Te6edf3endpoint Tff7b72in Te6edf3seenTb4b4b4:
Tff7b72continue
Te6edf3seenTff7b72.Td2a8ffaddTb4b4b4(Te6edf3endpointTb4b4b4)
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Te6edf3endpointTb4b4b4)
Tff7b72return Te6edf3out
Tff7b72def Td2a8ff_host_rootTb4b4b4(Te6edf3endpointTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3match Tff7b72= Te6edf3_SCHEME_HOST_RETff7b72.Td2a8ffsearchTb4b4b4(Te6edf3endpointTb4b4b4)
Tff7b72if Tff7b72not Te6edf3matchTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffhttps://Tffd700{Te6edf3matchTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff/Ta5d6ff"
Tff7b72def Td2a8ffcollect_network_endpointsTb4b4b4(Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3plugin_dirTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3seenTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Te6edf3manifest_endpointsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3scannedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffaddTb4b4b4(Te6edf3valueTb4b4b4: Tffa657strTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3require_httpTb4b4b4: Tffa657boolTb4b4b4, Te6edf3declaredTb4b4b4: Tffa657boolTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3value Tff7b72= Te6edf3_normalize_endpointTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72if Tff7b72not Te6edf3valueTb4b4b4:
Tff7b72return
Tff7b72if Te6edf3require_http Tff7b72and Tff7b72not Te6edf3_is_http_urlTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72if Te6edf3require_http Tff7b72and Tff7b72not Te6edf3_is_external_http_urlTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72if Te6edf3value Tff7b72in Te6edf3seenTb4b4b4:
Tff7b72return
Te6edf3seenTff7b72.Td2a8ffaddTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72if Te6edf3declaredTb4b4b4:
Te6edf3manifest_endpointsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3scannedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3valueTb4b4b4)
Te6edf3network Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnetworkTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3networkTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3endpoint Tff7b72in Te6edf3networkTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffendpointsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3endpointTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3urls Tff7b72= Te6edf3extract_urls_from_textTb4b4b4(Te6edf3endpointTb4b4b4)
Tff7b72if Tff7b72not Te6edf3urlsTb4b4b4:
Te6edf3addTb4b4b4(Te6edf3endpointTb4b4b4, Te6edf3require_httpTff7b72=Tff7b72FalseTb4b4b4, Te6edf3declaredTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72continue
Tff7b72for Te6edf3url Tff7b72in Te6edf3urlsTb4b4b4:
Te6edf3addTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3require_httpTff7b72=Tff7b72FalseTb4b4b4, Te6edf3declaredTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3plugin_dir Tff7b72and Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3plugin_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3rootTb4b4b4, Te6edf3_dirsTb4b4b4, Te6edf3files Tff7b72in Te6edf3osTff7b72.Td2a8ffwalkTb4b4b4(Te6edf3plugin_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3name Tff7b72in Te6edf3filesTb4b4b4:
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72if Tff7b72not Te6edf3_should_scan_network_fileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3data Tff7b72= Te6edf3handleTff7b72.Td2a8ffreadTb4b4b4(T79c0ff2_000_000Tb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Te6edf3text Tff7b72= Te6edf3dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffignoreTa5d6ff"Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72continue
Tff7b72for Te6edf3url Tff7b72in Te6edf3extract_urls_from_textTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Te6edf3addTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3require_httpTff7b72=Tff7b72TrueTb4b4b4, Te6edf3declaredTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72for Te6edf3endpoint Tff7b72in Tffa657listTb4b4b4(Te6edf3manifest_endpointsTb4b4b4) Tff7b72+ Tffa657listTb4b4b4(Te6edf3scannedTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3_host_rootTb4b4b4(Te6edf3endpointTb4b4b4)
Tff7b72if Te6edf3rootTb4b4b4:
Te6edf3addTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3require_httpTff7b72=Tff7b72TrueTb4b4b4, Te6edf3declaredTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3scannedTff7b72.Td2a8ffsortTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3manifest_endpoints Tff7b72+ Te6edf3scanned
Tff7b72def Td2a8ffrequires_network_fetchTb4b4b4(Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3endpointsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3network Tff7b72= Te6edf3normalize_network_modeTb4b4b4(
Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnetworkTa5d6ff"Tb4b4b4) Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3permissionsTb4b4b4, Tffa657dictTb4b4b4) Tff7b72else Tff7b72NoneTb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3network Tff7b72== Ta5d6ff"Ta5d6fffetchTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Tffa657boolTb4b4b4(Te6edf3endpointsTb4b4b4)
Tff7b72def Td2a8ffpermission_label_keyTb4b4b4(Te6edf3permission_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffplugins.permissions.Tffd700{Te6edf3permission_idTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff:Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff.Ta5d6ff'Tb4b4b4)Tffd700}Ta5d6ff"
Tff7b72def Td2a8ffserialize_grantedTb4b4b4(Te6edf3grantedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tffa657listTb4b4b4(Te6edf3granted Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3separatorsTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffdeserialize_grantedTb4b4b4(Te6edf3rawTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3raw Tff7b72is Tff7b72None Tff7b72or Te6edf3raw Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3dataTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tb4b4b4[Te6edf3item Tff7b72for Te6edf3item Tff7b72in Te6edf3data Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3itemTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4]
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────